home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / turboass.lzh / LIBRARYS / AES_VDI.S next >
Text File  |  1986-02-06  |  14KB  |  369 lines

  1. ;************************************************************************
  2. ;* Σ-soft-AES/VDI-Binding                                               *
  3. ;* ©1989 by Σ-soft, written by Markus Fritze           05.12.1989 14:40 *
  4. ;************************************************************************
  5.                 TEXT
  6. gem_init:       movea.l 4(SP),A6        ;Basepageadresse holen
  7.                 movea.w #$0100+$0400,A5 ;Größe der Basepage + Stackgröße (1k)
  8.                 adda.l  12(A6),A5       ;+ Größe des TEXT-Segments
  9.                 adda.l  20(A6),A5       ;+ Größe des DATA-Segments
  10.                 adda.l  28(A6),A5       ;+ Größe des BSS-Segments
  11.                 move.l  A5,D1           ;= Gesamtlänge des Programms
  12.                 andi.w  #$FFFE,D1       ;Länge nun gerade
  13.                 add.l   A6,D1           ;+ Programmstart (Basepageadresse)
  14.                 movea.l D1,SP           ;Stack endet dort
  15.                 move.l  A5,-(SP)        ;Programmlänge
  16.                 move.l  A6,-(SP)        ;Adresse der Basepage
  17.                 move.l  #$4A0000,-(SP)  ;Funktionsnummer + Dummyword (0)
  18.                 trap    #1              ;Mshrink(0,Basepageadr,Prglänge)
  19.                 lea     12(SP),SP       ;Nur noch den Stack korrigieren
  20. ;Das war schon alles. In A6 befindet sich noch die Basepageadresse und in a5
  21. ;liegt die totale Programmlänge (TRAP #1 zerstört D0-D2 und A0-A2!)
  22.  
  23.                 move.l  #appl_init,D0
  24.                 bsr     aes             ;Programm als GEM-Applikation anmelden
  25.                 move.w  D0,gl_apid
  26.  
  27.                 move.l  #graf_handle,D0
  28.                 bsr     aes             ;Handle der Bildschirm-Workstation ermitteln
  29.                 move.w  D0,gr_handle
  30.  
  31.                 lea     intin(PC),A4    ;VDI-Intin-Array (war früher falsch!)
  32.                 moveq   #10,D0
  33. gem_in1:        move.w  #1,(A4)+
  34.                 dbra    D0,gem_in1
  35.                 addq.w  #1,-(A4)
  36.                 moveq   #100,D0
  37.                 moveq   #$0B,D1
  38.                 lsl.w   #8,D1
  39.                 bsr     vdi             ;v_opnvwk() - Workstation öffnen
  40.                 move.w  int_in+10(PC),gr_handle ;VDI-Handle neu merken
  41.  
  42. ;************************************************************************
  43. ;* Ab hier liegt das eigene Programm                                    *
  44. ;************************************************************************
  45.  
  46.  
  47. ;************************************************************************
  48. ;* Programm beenden                                                     *
  49. ;************************************************************************
  50. gem_exit:       moveq   #101,D0
  51.                 moveq   #0,D1
  52.                 bsr.s   vdi             ;v_clsvwk() - Workstation schliessen
  53.  
  54.                 move.l  #appl_exit,D0
  55.                 bsr.s   aes             ;Applikation wieder abmelden
  56.  
  57.                 clr.w   -(SP)
  58.                 trap    #1              ;und verlassen mit Pterm0()
  59.  
  60. ;************************************************************************
  61. ;* Mein eigener kleiner AES-Aufruf                                      *
  62. ;* D0=Die ersten 4 Einträge im contrl-Array (Bytebreite!)               *
  63. ;*    Bit 24-31 = Der Opcode bzw. die Funktionsnummer                   *
  64. ;*    Bit 16-23 = Anzahl der Einträge in int_in                         *
  65. ;*    Bit 8-15  = Anzahl der Einträge in int_out                        *
  66. ;*    Bit 0-7   = Anzahl der Einträge in addr_in                        *
  67. ;* Die Anzahl der Einträge in addr_out ist stets 0.                     *
  68. ;* Ausnahme:Bei rsrc_gaddr() dort sollte dort eine 1 stehen (Atari hält *
  69. ;*          sich allersdings selbst nicht dran)                         *
  70. ;************************************************************************
  71. aes:            movem.l D1-A6,-(SP)     ;besser retten, man kann nie wissen
  72.                 lea     control(PC),A0
  73.                 clr.l   (A0)
  74.                 clr.l   4(A0)           ;contrl-Array löschen
  75.                 movep.l D0,1(A0)        ;und die neuen Daten eintragen
  76.                 lea     aes_pb(PC),A0
  77.                 move.l  A0,D1
  78.                 move.w  #$C8,D0
  79.                 trap    #2              ;AES aufrufen
  80.                 moveq   #0,D0
  81.                 move.w  int_out(PC),D0
  82.                 movem.l (SP)+,D1-A6
  83.                 rts
  84.  
  85. ;************************************************************************
  86. ;* Und das gleiche nochmal für die VDI-Funktionen                       *
  87. ;* D0 = Opcode bzw. die Funktionsnummer                                 *
  88. ;* D1 = Die Parameter (Bytebreite!)                                     *
  89. ;*      Bit 24-31 = Anzahl der Einträge in ptsin                        *
  90. ;*      Bit 16-23 = Anzahl der Einträge in ptsout                       *
  91. ;*      Bit 8-15  = Anzahl der Einträge in intin                        *
  92. ;*      Bit 0-7   = Anzahl der Einträge in intout                       *
  93. ;* Die Gerätekennung wird der Variable "gr_handle" entnommen.           *
  94. ;************************************************************************
  95. vdi:            movem.l D2-A6,-(SP)
  96.                 lea     contrl(PC),A3
  97.                 move.w  D0,(A3)+
  98.                 clr.l   (A3)+
  99.                 clr.l   (A3)+
  100.                 movep.l D1,-7(A3)
  101.                 move.w  gr_handle(PC),2(A3)
  102.                 lea     vdi_pb(PC),A0
  103.                 move.l  A0,D1
  104.                 moveq   #$73,D0
  105.                 trap    #2
  106.                 movem.l (SP)+,D2-A6
  107.                 rts
  108.  
  109. ;************************************************************************
  110. ;* Nun folgt noch der DATA-Bereich                                      *
  111. ;************************************************************************
  112.                 DATA
  113. aes_pb:         DC.L control    ;Der AES-Parameterblock
  114.                 DC.L global
  115.                 DC.L int_in
  116.                 DC.L int_out
  117.                 DC.L addr_in
  118.                 DC.L addr_out
  119.  
  120. vdi_pb:         DC.L contrl     ;Der VDI-Parameterblock
  121.                 DC.L intin
  122.                 DC.L ptsin
  123.                 DC.L intout
  124.                 DC.L ptsout
  125.  
  126. ;************************************************************************
  127. ;* und noch ein wenig BSS-Bereich                                       *
  128. ;************************************************************************
  129.                 BSS
  130. contrl:         DS.W 11         ;Die VDI-Variablen
  131. intin:          DS.W 128
  132. intout:         DS.W 128
  133. ptsin:          DS.W 128
  134. ptsout:         DS.W 128
  135.  
  136. control:        DS.W 5          ;Die AES-Variablen
  137. global:         DS.W 15
  138. int_in:         DS.W 16
  139. int_out:        DS.W 7
  140. addr_in:        DS.L 3
  141. addr_out:       DS.L 1
  142.  
  143. gl_apid:        DS.W 1          ;ID der Applikation
  144. gr_handle:      DS.W 1          ;Die Handle der Bildschirm-Workstation (graf_handle)
  145.  
  146. ;EQU's mit Konstanten sind auch als Vorwärtsreferenzen möglich, da diese Symbole
  147. ;ihren Wert bereits bei der Eingabe erhalten:
  148.  
  149. appl_init:      EQU $0A000100
  150. appl_read:      EQU $0B020101
  151. appl_write:     EQU $0C020101
  152. appl_find:      EQU $0D000101
  153. appl_tplay:     EQU $0E020101
  154. appl_trecord:   EQU $0F010101
  155. appl_bvset:     EQU $10020100   ;ab GEM 2.0
  156. appl_yield:     EQU $11000100   ;ab GEM 2.0
  157. appl_exit:      EQU $13000100
  158.  
  159. evnt_keybd:     EQU $14000100
  160. evnt_button:    EQU $15030500
  161. evnt_mouse:     EQU $16050500
  162. evnt_mesag:     EQU $17000101
  163. evnt_timer:     EQU $18020100
  164. evnt_multi:     EQU $19100701
  165. evnt_dclick:    EQU $1A020100
  166.  
  167. menu_bar:       EQU $1E010101
  168. menu_icheck:    EQU $1F020101
  169. menu_ienable:   EQU $20020101
  170. menu_tnormal:   EQU $21020101
  171. menu_text:      EQU $22010102
  172. menu_register:  EQU $23010101
  173. menu_unregister:EQU $24010100   ;ab GEM 2.0
  174.  
  175. objc_add:       EQU $28020101
  176. objc_delete:    EQU $29010101
  177. objc_draw:      EQU $2A060101
  178. objc_find:      EQU $2B040101
  179. objc_offset:    EQU $2C010301
  180. objc_order:     EQU $2D020101
  181. objc_edit:      EQU $2E040201
  182. objc_change:    EQU $2F080101
  183.  
  184. form_do:        EQU $32010101
  185. form_dial:      EQU $33090100
  186. form_alert:     EQU $34010101
  187. for